/**
 *  双端队列
 *  除了和普通队列有相同的isEmpty、clear、size 和 toString的方法外，还有一下方法 
 *  addFront(element)：该方法在双端队列前端添加新的元素。
    addBack(element)：该方法在双端队列后端添加新的元素（实现方法和 Queue 类中的enqueue 方法相同）。
    removeFront()：该方法会从双端队列前端移除第一个元素（实现方法和 Queue 类中的dequeue 方法相同）。
    removeBack()：该方法会从双端队列后端移除第一个元素（实现方法和 Stack 类中的pop 方法一样）。
    peekFront()：该方法返回双端队列前端的第一个元素（实现方法和 Queue 类中的 peek方法一样）。
    peekBack()：该方法返回双端队列后端的第一个元素（实现方法和 Stack 类中的 peek方法一样）
 * 
 */
class Deque {
  constructor () {
    this.count = 0
    this.lowestCount = 0
    this.items = {}
  }
  
  isEmpty() {
    return this.count - this.lowestCount === 0
  }
  size() {
    return this.count - this.lowestCount
  }
  clear() {
    this.items = {}
    this.count = 0
    this.lowestCount = 0
  }
  toString() { 
    if (this.isEmpty()) { 
      return ''; 
    } 
    let objString = `${this.items[this.lowestCount]}`; 
    for (let i = this.lowestCount + 1; i < this.count; i++) { 
      objString = `${objString},${this.items[i]}`; 
    } 
    return objString; 
  }
}